fix: remove runtime validation of components/snippets, rely on types instead#12507
fix: remove runtime validation of components/snippets, rely on types instead#12507dummdidumm merged 17 commits intomainfrom
Conversation
🦋 Changeset detectedLatest commit: c27d8de The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
This doesn't yet update the implementation of server-side snippets to match the types, so we're not yet able to create snippets that curry arguments etc. That can be a follow-up, I reckon |
|
Not adding that feels incomplete - if we make the underlying types more visible, but it's still not actually the real underlying types, then we haven't won anything. |
|
Gah I thought you'd say that 😅 May not get as far as that this evening, we'll see |
|
Is it possible to split the validation rework out into its own PR? That work seems fairly uncontroversial, while the snippet type thing might take a few more discussions possibly. (Also I'm wondering if it makes sense / is possible to turn snippet arguments into an array under the hood, which also might open up the thing towards spreading) |
|
good idea — #12521 |
|
Per discussion, removed the controversial snippet changes, and restricted this PR to slightly tweaking the |
#12452 (comment).
Draft because the
render_tag_invalid_argumentmessage is now incorrect, but fixing it requires untangling a few other things. It turns out this particular validation is very broken at present:If you have a component like this...
...then
$$slots.defaultis generated, and if you do{@render children()}on the other side, it'll just be blank. Feels like at the very least it should error becausechildrenisundefined, as we would for{@render nonexistent()}if you do
{@render children('bob')}then suddenly it errors. that makes no sense!if you do
let { children: x } = $props()and{@render x('bob')}it stops erroring again, because we're only looking for an identifier whose name ischildren. This is brittle as all hellas a corollary: you can't declare a
{#snippet children(arg)}inside the child component, because you'll get a false positive errorIn short: we need to rip the whole thing out. Seems like we'd be better off creating a dummy
childrenprop in the parent that errors on behalf of the child when you try to render it.Before submitting the PR, please make sure you do the following
feat:,fix:,chore:, ordocs:.Tests and linting
pnpm testand lint the project withpnpm lint